// 引入express模块
const express=require('express')
// 引入sha1
const sha1=require('sha1')

// 创建app应用对象
const app=express()

//定义配置对象
const  config={
    'appID':'wxd335c2c3f43d7194',
    'appsecret':'e66e1a5f21c9328f17cf47dde767474d',
    'token':'gaidalou'
}
//验证服务器的有效性
app.use((req,res,next)=>{
    // 微信服务器提交的参数
    console.log(req.query)
    /*
    { signature: '0631c510ef82306f0302927484aa575ea9b34d62', 微信的加密签名
  echostr: '1094439402354023869',微信的随机字符串
  timestamp: '1568704665', 微信的发送请求时间戳
  nonce: '1641573458' }   微信的随机数字
     */
    const {signature,echostr,timestamp,nonce}=req.query;
    const {token}=config;
    // 1、将参与微信签名的三个参数（timestap nonce  token） 按照字典序排序并组合在一起形成一个数组token是网页上设置的
    const arr=[timestamp,nonce,token];
    const arrSort=arr.sort();
    console.log(arrSort);
    // 2、将数组里面所有参数拼成一个字符串，进行sha1加密
    const str=arrSort.join('');
    const sha1Str=sha1(str);
    console.log(sha1Str);
    // 3、加密完成就生成了一个signnature。和微信发送过来的进行对比。
    if(sha1Str==signature){
        //如果一致 返回给微信echostr
        res.send(echostr)
    }else{
        //如果不一样
        console.log('不一样')
        res.end()
    }
})
//监听端口号
app.listen(3000,()=>console.log('服务器启动成功'))